CROSS_COMPILE	?= arm-linux-gnueabihf-
TARGET 			?= uart

CC 				:= $(CROSS_COMPILE)gcc
LD 				:= $(CROSS_COMPILE)ld
OBJCOPY 		:= $(CROSS_COMPILE)objcopy
OBJDUMP 		:= $(CROSS_COMPILE)objdump

# 头文件 .h 路径
INCDIRS			:= imx6ul \
					bsp/clk \
					bsp/led \
					bsp/delay \
					bsp/beep \
					bsp/gpio \
					bsp/key \
					bsp/exit \
					bsp/int \
					bsp/epit_timer \
					bsp/key_filter \
					bsp/uart
# 源文件.S .c 路径
SRCDIRS			:= project \
					bsp/clk \
					bsp/led \
					bsp/delay \
					bsp/beep \
					bsp/gpio \
					bsp/key \
					bsp/exit \
					bsp/int \
					bsp/epit_timer \
					bsp/key_filter \
					bsp/uart

# 每个路径前加一个 -I
INCLUDE			:= $(patsubst %, -I %, $(INCDIRS))

# 找到SRCDIRS所有路径下的.S文件 包含路径名
SFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))
# 找到SRCDIRS所有路径下的.c文件 包含路径名
CFILES			:= $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))

# 去除路径明的 .S 文件
SFILENDIR		:= $(notdir $(SFILES))
# 去掉路径名的 .c 文件
CFILENDIR		:= $(notdir $(CFILES))

# 将所有的 .S 换成.o 并在前面加上obj/
SOBJS			:= $(patsubst %, obj/%, $(SFILENDIR:.S=.o))
# 将所有的 .c 换成.o 并在前面加上obj/
COBJS			:= $(patsubst %, obj/%, $(CFILENDIR:.c=.o))
# .o 文件集合
OBJS			:= $(SOBJS) $(COBJS)
# 自定义make查找路径 即所有的源文件路径
VPATH			:= $(SRCDIRS)

$(TARGET).bin:$(OBJS)
	$(LD) -Timx6ul.lds -o $(TARGET).elf $^
	$(OBJCOPY) -O binary -S $(TARGET).elf $@
	$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

# 依赖文件为 obj/start.o形式的文件转换成start.S
$(SOBJS) : obj/%.o : %.S
	$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<

# 依赖文件为 obj/key.o形式的文件转换成key.c
$(COBJS) : obj/%.o : %.c
	$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<

# 声明伪目标
.PHONY:clean
# 命令前面加 -表示命令执行出错忽略继续执行 
clean:
	-rm -rf *.o $(TARGET).bin $(TARGET).elf $(TARGET).dis $(COBJS) $(SOBJS)
